package com.upbos.upm.org;

import com.upbos.core.ret.RetData;
import com.upbos.data.core.Pagination;
import com.upbos.sso.UserContext;
import com.upbos.upm.dict.DictUtil;
import com.upbos.upm.entity.DictMapping;
import com.upbos.upm.entity.Org;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

import static com.upbos.core.ret.RetData.success;

/**
 * <b>Application name：</b> OrgController.java <br>
 * <b>Application describing：组织机构管理 </b> <br>
 * <b>Copyright：</b> Copyright &copy; 2019 upbos.com 版权所有。<br>
 * <b>Company：</b> upbos.com <br>
 * <b>@Date：</b> 2019年11月08日 13:59 <br>
 * <b>@author：</b> <a href="mailto:Jason@miyzh.com"> Jason </a> <br>
 * <b>@version：</b>V5.1.0 <br>
 */
@RestController
@RequestMapping("upm/org")
public class OrgController {

    /**
     * 组织机构服务类
     */
    @Resource
    private OrgService orgService;

    /**
     * 查询用户可以访问的机构列表
     *
     * @param userContext 用户上下文
     * @return 机构列表
     */
    @PostMapping("listOrg")
    public RetData<Org> listOrg(String orgName, UserContext userContext) {
        return orgService.listOrg(orgName, userContext);
    }

    /**
     * 根据名称模糊查询组织机构列表
     *
     * @param name 组织机构名称
     * @return 组织机构列表
     */
    @PostMapping("listOrgByName")
    public RetData listOrgByName(Integer pageNo, Integer pageSize, String type, String name) throws Exception {
        Pagination<Org> pagination = orgService.listOrgByName(pageNo, pageSize, type, name);
        DictUtil.translate(pagination.getRows(), new DictMapping("orgType", "type", "typeName"));

        return success(pagination);
    }

    /**
     * 保存组织机构
     *
     * @param org 组织机构
     */
    @PostMapping("saveOrg")
    public RetData saveOrg(UserContext userContext, Org org) {
        org.setCreateUserId(userContext.getSsoUser().getUid());
        return success(orgService.saveOrg(org));
    }

    /**
     * 删除组织机构
     *
     * @param org 组织机构
     */
    @PostMapping("deleteOrg")
    public RetData deleteOrg(Org org) {
        return orgService.deleteOrg(org);
    }
}
